package com.example.module_motocircle.flow

import androidx.lifecycle.ViewModelStore
import kotlinx.coroutines.flow.MutableSharedFlow

/*
SharedFlow 是一种事件总线式数据流，具有以下特点：

不需要初始值
可以配置缓冲区和重放策略
不自动去重（除非明确配置）
新订阅者默认不会收到之前发送的值（除非配置重放）
 */
class ShareFlow {
   //创建 SharedFlow
   // 基本创建方式
//   private val _events = MutableSharedFlow<Event>()
//    val events = _events.asSharedFlow()
//
//    // 带配置的创建方式
//    private val _events = MutableSharedFlow<Event>(
//        replay = 1,       // 新订阅者收到最近1个事件
//        extraBufferCapacity = 10 // 缓冲区大小
//    )


    //发送事件
    fun test(){
//        viewModelScope.launch {
//            _events.emit(Event.ShowMessage("操作成功"))
//        }
    }



    //收集事件
    fun test2(){
//        viewModelScope.launch {
//            events.collect { event ->
//                when(event) {
//                    is Event.ShowMessage -> showToast(event.message)
//                    is Event.Navigate -> navigateTo(event.destination)
//                }
//            }
//        }
    }




    // 使用场景
    //一次性事件（如显示Toast、导航事件）
    //广播通知多个组件
    //需要处理背压的场景
}
/*
StateFlow 和 SharedFlow 对比
特性	StateFlow	SharedFlow
初始值	必须提供	不需要
值保持	保持最新值	可配置是否保持
新订阅者行为	立即收到当前值	默认不收到历史值（可配置）
值去重	自动去重	默认不去重
发射方式	.value = 或 update{}	emit()
背压处理	无缓冲区概念	可配置缓冲区
使用场景	状态管理	事件通知
 */